#ifndef TETRIS_PIECE_HPP
#define TETRIS_PIECE_HPP

#include "constants.hpp"
#include "point.hpp"
#include "tetromino.hpp"
#include <vector>
#include <ncurses.h> // 需要ncurses绘制

namespace Tetris {

class Piece {
public:
    Piece(BlockType type);

    // 获取当前方块的绝对坐标
    std::vector<Point> getAbsoluteCoords() const;

    // 移动方块（dx, dy是相对位移）
    void move(int dx, int dy);

    // 旋转方块
    void rotate();
    // 旋转撤销（用于碰撞检测后的回滚）
    void unrotate(); 

    // 绘制方块
    void draw(WINDOW* win, int offset_x, int offset_y, bool is_ghost = false) const;

    // 清除方块
    void clear(WINDOW* win, int offset_x, int offset_y) const;

    // 一些访问器
    BlockType getType() const { return m_tetromino.m_type; }
    int getColorId() const { return m_tetromino.m_colorId; }
    Point getPosition() const { return m_position; }
    int getRotation() const { return m_rotationState; }
    const Tetromino& getTetromino() const { return m_tetromino; }


private:
    Tetromino m_tetromino;  // 对应的方块类型数据
    Point m_position;  // 方块左上角在游戏板上的位置
    int m_rotationState;  // 当前旋转状态索引
};


} // namespace Tetris

#endif // TETRIS_PIECE_HPP

